<template>
  <el-date-picker :id="name" size="small" type="date" v-model="valueModel"
                  :placeholder="placeholder" @change="onChange" clearable></el-date-picker>
</template>

<script>
/* eslint-disable */
import {InputType} from "@/lang/fast-form";

/**
 * 日期选择器组件
 */
export default {
    name: "SmartDatePicker"
    , components: {}
    , inject: ['fast_form']
    , props: {
        // 字段名
        name: {type: String}
        // 类型，默认输入框
        , type: {type: String, default: 'date'}
        // 默认值
        , value: {type: [String, Date], default: undefined}
        // 文字提示
        , placeholder: {type: String, default: ''}
    }
    , watch: {
        value: {
            handler: function (val) {
                this.input.setFormatValue(val);
            }
        }
    }
    , data() {
        return {
            // 值模型，用于计算的值，任何时候都不允许为空，避免 vue 联动失效
            valueModel: undefined
            // fast-form 表单接口
            , input: undefined
        }
    }
    , created() {
        let input = this.fast_form.getFormInput(this.name);

        // 覆盖重写默认的函数
        input.wrap(InputType.DatePicker);

        input.setDom(this);
        this.input = input;

        // 首次渲染数据 & 触发数据联动
        input.setFormatValue(this.value);
    }
    , methods: {
        /**
         * 用户输入变换事件
         * @param val
         */
        onChange: function (val) {
            this.input.changeValue(val);
        }
        /**
         * 数据受控函数，数据发生变化的时候，会通知到当前组件
         *
         * @see FastForm
         * @param val
         */
        , onChangeValue: function (val) {
            this.valueModel = val;
        }
    }
}
</script>
